﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;

namespace Operacional
{
    public partial class frmDisplay : Form
    {
        #region "Declarações"
        private Tempos _myTimes;
        private string _linha, _tarefa, _tarefaDes, _codTarefa;
        private DataView _dvLinhasTarefas;
        #endregion

        public frmDisplay()
        { InitializeComponent(); }

        private void frmDisplay_Load(object sender, EventArgs e)
        {
            Dock = DockStyle.Fill;
            frmEntrada.tmrLogin.Enabled = false;
            _linha = frmLinhas.numLinha;
            _dvLinhasTarefas = frmLinhas.dvLinhasTarefas;

            Program.entrada.lblStatus.Text =
                string.Format("Utilizador: {0} Linha: {1}", frmEntrada.dvUsers[0][1], _linha);

            frmLinhas.dvLinhasTarefas.RowFilter = string.Format("[Linha]='{0}' and [Estado]='I'", _linha);

            _codTarefa = frmLinhas.dvLinhasTarefas[frmLinhas.dvLinhasTarefas.Count - 1]["Tarefa"].ToString();

            frmLinhas.dvTarefas.RowFilter = string.Format("Tare_Cod Like '{0}'", _codTarefa);
            _tarefa = frmLinhas.dvTarefas[frmLinhas.dvTarefas.Count - 1]["Tare_Des"].ToString();
            _tarefaDes = frmLinhas.dvTarefas[frmLinhas.dvTarefas.Count - 1]["Tare_Obs"].ToString();

            _myTimes = new Tempos();
            _myTimes.AvgTimes_();
            tmrTarefa.Enabled = true;

            lblLinha.Text = _tarefa + " - Linha: " + _linha;
            lblObservacoes.Text = _tarefaDes;
            txtObs.Text = frmLinhas.dvLinhasTarefas[frmLinhas.dvLinhasTarefas.Count - 1]["Observacoes"].ToString().Replace("\"", "");

            #region Media Tempos
            btnMedia.Text = string.Format("{0}.{1}:{2}:{3}", Math.Abs(_myTimes.Media.TotalDays).ToString("00"),
                                                                   Math.Abs(_myTimes.Media.Hours).ToString("00"),
                                                                   Math.Abs(_myTimes.Media.Minutes).ToString("00"),
                                                                   Math.Abs(_myTimes.Media.Seconds).ToString("00"));
            #endregion
        }

        private void tmr_Tick(object sender, EventArgs e)
        {
            frmLinhas.dvLinhasTarefas.RowFilter = string.Format("Linha='{0}' And Estado Like 'I'", frmLinhas.numLinha);

            try
            {
                _myTimes.Duracao_();
                btnDuracao.Text = string.Format("{0}.{1}:{2}:{3}", Math.Abs(_myTimes.Duracao.Days).ToString("00"),
                                                                        Math.Abs(_myTimes.Duracao.Hours).ToString("00"),
                                                                        Math.Abs(_myTimes.Duracao.Minutes).ToString("00"),
                                                                        Math.Abs(_myTimes.Duracao.Seconds).ToString("00"));
            }
            catch
            { }

            #region Muda Cor Duracao
            if (TimeSpan.Parse(this.btnDuracao.Text) > TimeSpan.Parse(this.btnMedia.Text) && (this.btnMedia.Text != "00.00:00:00"))
            {
                double dDuracao = Convert.ToDouble(TimeSpan.Parse(this.btnDuracao.Text).TotalSeconds);
                double dMedia = Convert.ToDouble(TimeSpan.Parse(this.btnMedia.Text).TotalSeconds);

                this.btnDuracao.FlatStyle = FlatStyle.Standard;

                if (dDuracao > dMedia + 0.25 * dMedia)
                    this.btnDuracao.BackColor = Color.Red;
                else
                    this.btnDuracao.BackColor = Color.Orange;
            }
            else
                this.btnDuracao.BackColor = System.Drawing.Color.Green;
            #endregion
        }

        private void btnEnd_Click(object sender, EventArgs e)
        {
            _dvLinhasTarefas.RowFilter = string.Format("[Linha]='{0}' and [Estado]='Em Producao'", _linha);

            if (MessageBox.Show("Deseja Terminar a Tarefa Actual?", "Terminar Tarefa", MessageBoxButtons.YesNo) ==
                DialogResult.Yes)
            {
                try
                {
                    DateTime tempoactual = DateTime.Now;
                    TimeSpan duracao = TimeSpan.Parse(btnDuracao.Text);
                    double horas = duracao.TotalSeconds;

                    #region Desperdicio

                    double desperdicio;
                    if (!string.IsNullOrEmpty(frmLinhas.dvLinhasTarefas[frmLinhas.dvLinhasTarefas.Count - 1]["CONSUMO"].ToString()))
                    {
                        var consumo =
                            double.Parse(frmLinhas.dvLinhasTarefas[frmLinhas.dvLinhasTarefas.Count - 1]["CONSUMO"].ToString());

                        desperdicio = consumo * (horas / 3600);
                    }
                    else
                        desperdicio = 0;
                    #endregion

                    #region Nova Row
                    var dRow = frmEntrada.dsFilkemp.Tables["dtLinhas_Tarefas"].NewRow();

                    dRow["Linha"] = frmLinhas.numLinha;
                    dRow["Tarefa"] = frmLinhas.dvTarefas[frmLinhas.dvTarefas.Count - 1]["Tare_Cod"].ToString();
                    dRow["Descricao"] = frmLinhas.dvTarefas[frmLinhas.dvTarefas.Count - 1]["Tare_Des"].ToString();
                    dRow["Duracao"] = btnDuracao.Text;
                    dRow["Utilizador"] = frmEntrada.dvUsers[0][0].ToString();
                    dRow["Consumo"] = PedeOrdemProd.dvProducao[0].Row.ItemArray[15];
                    dRow["Estado"] = "F";
                    dRow["Desperdicio"] = desperdicio;
                    dRow["Data"] = tempoactual;
                    dRow["Observacoes"] = txtObs.Text;
                    dRow["Utilizador"] = frmEntrada.dvUsers[0][0].ToString();
                    dRow["Ordem"] =
                        frmLinhas.dvLinhasTarefas[frmLinhas.dvLinhasTarefas.Count - 1]["Ordem"].ToString();

                    frmEntrada.dsFilkemp.Tables["dtLinhas_Tarefas"].Rows.Add(dRow);
                    frmEntrada.daLinhasTarefas.Update(frmEntrada.dsFilkemp.Tables["dtLinhas_Tarefas"]);

                    #endregion

                    frmLinhas linhas = new frmLinhas { MdiParent = Program.entrada };
                    linhas.Show();
                    Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void btnGravaObs_Click(object sender, EventArgs e)
        {
            DataRow[] dRow =
                frmEntrada.dsFilkemp.Tables["dtLinhas_Tarefas"].Select("Id=" + frmLinhas.dvLinhasTarefas[frmLinhas.dvLinhasTarefas.Count - 1]["Id"]);
            dRow[0]["Observacoes"] = "\"" + txtObs.Text + "\"";

            frmEntrada.daLinhasTarefas.Update(frmEntrada.dsFilkemp.Tables["dtLinhas_Tarefas"]);
            MessageBox.Show("Observação gravada.", "Sucesso");
        }

        private void btnManutencao_Click(object sender, EventArgs e)
        {
            frmManutencao Manutenção = new frmManutencao();
            Manutenção.MdiParent = Program.entrada;
            Manutenção.Show();
            Close();
            Dispose();
        }
    }
}